【新機能】AWS WAFマネージドルールを使ってWordPressに対する攻撃を防いでみた #reinvent
こんにちは、臼田です。
今回はAWS WAFの神アップデートであるManaged Ruleを利用して、Wordpressの脆弱性に対する攻撃を防いでみたいと思います。
WAFマネージドルールって何?
今回発表されたAWS WAFの新機能で、下記に速報があります。
そもそもWAFマネージドルールって何がいいの?
マネージドルールがこれまでのAWS WAFのルールより優れている点は大きく2つあります。
ルールを自分で管理しなくていい
これまでAWS WAFでは、攻撃に対する防御に利用するルールは自分で作成する必要性がありました。
例えば防御したいサイトに対して、SQLインジェクションの防御用のコンディションを作成し、コンディションにフィルターを追加し、コンディションをルールに適用して利用します。
このような細かい設定を沢山行うのは結構手間ですよね。これがSQLインジェクションの防御だけなので、XSS等についても同じように、一個一個のコンディションを登録していく感じになります。
マネージドルールは、コンディションやフィルターが全てAWS側で管理されていて、ユーザはルールを作る必要がありません!
各種攻撃方法に対する設定方法(コンディション)についての理解がなくても簡単に利用できます。
また、新しい攻撃方法を防ぐための条件を自分で追加しなくても、マネージドルールを提供している各ベンダーが更新するため管理コストも非常に少なく済みます。
用途に合わせた複雑な条件の防御ができる
既存のWAFのルールでは、単純なSQLインジェクションやXSS等のAWSで用意しているコンディション以外の攻撃に対する防御はできませんでした。頑張って細かい設定を行うこともできますが、あまり現実的ではありません。
例えば、Wordpress等のCMSの既知の脆弱性については防御できないことがあり、AWS WAF導入を見送る要因の一つでした。
マネージドルールでは、サードパーティのベンダーが様々なユースケースに対して適切なルールを提供しています。
以下が現状利用できるのルールです。
- Alert Logic WordPress Virtual Patch RuleGroup for AWS WAF
- Fortinet AWS WAF Malicious Bots Ruleset
- Fortinet AWS WAF SQLi/XSS Ruleset
- Fortinet AWS WAF General and Known Exploits Ruleset
- Fortinet AWS WAF Complete OWASP Top 10 Ruleset
- Imperva Security Rules for AWS WAF
- Imperva's Managed Rules for WordPress Protection
- Trend Micro Managed Rules for AWS WAF - Content Management System (CMS)
- Trend Micro Managed Rules for AWS WAF - WebServer (Apache, Nginx)
- Trustwave Managed Rules for AWS WAF - CMS Virtual Patches
- Trustwave Managed Rules for AWS WAF - ModSecurity Virtual Patching
WordPress等のCMSに最適なものや、既知の攻撃に対するルールなど用途にあったものが選べるので、とても利用しやすいです。
サードパーティの通常のWAF導入よりもいい!
これまでのAWS WAFのルールに対するメリットだけではなく、サードパーティの通常のWAFに対するメリットもあります!
AWS上での親和性が高くメンテナンスフリー
もちろん、サードパーティ製の通常のWAFを導入することで上記を満たすこともできますが、マネージドルールの場合にはAWS WAFを利用するため、AWS上のシステムと親和性が高く簡単に利用できる利点があります。
通常のWAFは大体EC2インスタンスを管理することになるため、そのインスタンスの面倒をみなくてはいけません。
キャパシティを考えたり、AutoScalingの設定をしたり、冗長性を考えたりする必要があります。
AWS WAFはマネージドサービスであり、これらを考える必要はありません。
どんなWAFをAWS上に導入するよりも一番楽だと思います!
従量課金で手軽に利用できる
通常のWAF製品は、どうしても年間ライセンスなどで縛られて利用の敷居が上がります。
マネージドルールはAWSのMarketplacesから利用でき、従量課金です!
しかも全体的にすごくお手頃です!利用の簡易性とコストの最適化が見込めます。
設定してみた
それではマネージドルールを設定し、WAFに適用していきます。
マネージドルールのSubscribe
マネージドルールはMarketplaceで公開されているものをSubscribeして利用します。
今回はWordpressの防御ということで、Trend Micro Managed Rules for AWS WAF - Content Management System (CMS)を使ってみます。
上記ページにアクセスし、「Continue」を押します。
ちなみに、このルールの料金は月額$5と100万リクエスト毎に$0.2です。安すぎ!
「Subscribe」を押して完了です。
ACLの作成と適用
Web ACLsの画面から「Create web ACL」で作成します。
名前やターゲット等を適当に設定して「Next」を押します。今回は事前に保護対象のALBやインスタンスは作成してあります。
コンディションの作成画面は何も必要無いのでそのまま「Next」を押します。
ルールを選択するところで「Subscribe rules」から先程登録したマネージドルールを選択して「Add rule to web ACL」を押します。
マネージドルールを追加するとActionが「No override」がデフォルトで選択されていますのでそのままにします。ちなみに通常のルールだと「Allow, Count, Block」が選択できますが、現状では「No override」でBlockと同じような動き、「Override to count」でCountと同じような動きになりました。
Default actionはルールに引っかからない場合の動作なので「Allow ...」を選択して、「Review and create」を押します。
確認画面が出るので「Confirm and Create」を押してACLの作成を完了します。
これでACLが作成され、保護対象に適用されました。
防御してみた
今回利用する脆弱性はWordpressの権限昇格に関するものです。下記に詳細があります。
WordPress 4.7.1 の権限昇格脆弱性について検証した
環境の構築や脆弱性の詳細についての説明は省きますが、簡単に言うと特定のリクエストを送ると記事の内容を自由に書き換えることが可能な脆弱性です。
最初の状態では対象の記事は下記のようになっています。
WAF(ALB)を経由しないで直接攻撃すると下記のようにコンテンツを書き換えれることが確認できます。
それではWAF経由で同様の攻撃を行います。攻撃に対するレスポンスは下記のようになりました。
$ curl http://xxxxxxxxx.ap-northeast-1.elb.amazonaws.com/wordpress/xxxxxxxx/?id=xxxx -d "xxxx" -d "xxxx" <html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center> <h1>403 Forbidden</h1> </center> </body> </html>
通常は完了のリクエストがありますが、WAFでブロックして403を返している事がわかります。
この状態では、記事の画面は変わっておらず、適切に防御されていることが確認できました。
また、通常のルールと同じように動作した内容をCloudWatchで確認することが可能です。
下記ではTrendMicroのマネージドルールでBlockされていることが確認できました。
続いて、ルールのアクションを「Override to Count」に変更して攻撃してみます。
今回は403が帰ってこずに普通の(攻撃成功の)レスポンスが帰ってきました。
記事は下記の通り書き換えられています。
この時CloudWatchでは、Countが上がっています。
アクションの設定は、いわゆる防御モードと検知モードとして切り替えて利用できますね。
まとめ
マネージドルールが簡単に利用できることや、セキュリティベンダーのパワフルな防御ルールが利用できることが確認できました!
AWSの簡易的で、しかも従量課金で安いという良いところと、セキュリティベンダーの素晴らしく強力なルールを兼ね備えたこの機能は、今後のWebセキュリティにおいてとてもいい選択肢になると思います!
高いWAFには相応の強みもありますが、手軽に従量課金で利用できる強力なWAFもぜひ使ってみてはいかがでしょうか?